package net.lab1024.sa.admin.module.business.wms.stock.domain.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Data;

/**
 * 库存信息表（单租户版） 实体类
 *
 * @Author ADog
 * @Date 2025-09-20 15:55:03
 * @Copyright 1.0
 */

@Data
@TableName("wms_stock")
public class StockEntity {

    /**
     * 主键
     */
    @TableId(type = IdType.AUTO)
    private Long stockId;

    /**
     * 仓库ID（关联仓库表）
     */
    private Long warehouseId;

    /**
     * 物料ID（关联t_core_material表）
     */
    private Long materialId;

    /**
     * 库存编码（业务唯一，如“WH01-MAT001-B202409”）
     */
    private String stockCode;

    /**
     * 批次编码（物料生产批次，如“2024092001”）
     */
    private String batchCode;

    /**
     * 实际库存数量（保留3位小数，支持散装物料如“10.500kg”）
     */
    private BigDecimal stockQuantity;

    /**
     * 锁定库存数量（已下单未出库，不允许其他订单占用）
     */
    private BigDecimal lockedQuantity;

    /**
     * 生产日期（用于效期追溯）
     */
    private LocalDateTime productionTime;

    /**
     * 过期日期（用于临期/过期预警）
     */
    private LocalDateTime expirationTime;

    /**
     * 是否禁用：[0=未禁用，1=已禁用]（禁用后不参与库存分配）
     */
    private Integer isDisabled;

    /**
     * 是否逻辑删除：[0=未删除，1=已删除]（避免物理删除丢失数据）
     */
    private Integer isDeleted;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间（自动更新）
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 备注（如“紧急库存，优先出库”）
     */
    private String remark;

    /**
     * 唯一标识：未删除时，由【仓库ID+物料ID+批次编码】生成，确保无重复库存
     */
    private String uniqueToken;

}
